package com.ahncnk.powermonitor.commons.exception;

import org.springframework.http.HttpStatus;

/**
 * 自定义异常.
 * 建议继承{@link AbstractApplicationException}来自定义业务异常.
 */
public class ApplicationRuntimeException extends RuntimeException {
    private final HttpStatus status;
    private final String reason;

    /**
     * 400异常.
     */
    public ApplicationRuntimeException() {
        this(HttpStatus.BAD_REQUEST, null, null, null);
    }

    /**
     * 使用指定的{@link HttpStatus}来创建异常.
     */
    public ApplicationRuntimeException(HttpStatus status) {
        this(status, null, null, null);
    }

    /**
     * 使用指定的{@link HttpStatus}和错误信息来创建异常.
     *
     * @param status           错误码
     * @param messageAndReason 错误信息. 会提示给用户.
     */
    public ApplicationRuntimeException(HttpStatus status, String messageAndReason) {
        this(status, messageAndReason, messageAndReason, null);
    }


    /**
     * 创建异常信息.
     *
     * @param status  错误码
     * @param message 错误信息. 打印在日志中，不提示给用户。
     * @param reason  错误友好提示信息. 会提示给用户。
     */
    public ApplicationRuntimeException(HttpStatus status, String message, String reason) {
        this(status, message, reason, null);
    }


    /**
     * 创建异常信息.
     *
     * @param status  错误码
     * @param message 错误信息. 打印在日志中，不提示给用户。
     * @param reason  错误友好提示信息. 会提示给用户。
     * @param cause   引发改异常的详细原因.
     */
    public ApplicationRuntimeException(HttpStatus status, String message, String reason, Exception cause) {
        super(message, cause);
        this.status = status;
        this.reason = reason;
    }

    public HttpStatus getStatus() {
        return status;
    }

    public String getReason() {
        return reason;
    }

}
